package cn.jetpiece.cloud.dict.app.modular.dict.service;

import cn.jetpiece.cloud.dict.app.modular.dict.entity.Dict;
import cn.jetpiece.cloud.dict.app.modular.dict.entity.DictItem;
import cn.jetpiece.cloud.model.model.DictModel;
import cn.jetpiece.cloud.model.model.TableDictQuery;
import cn.jetpiece.cloud.model.model.TreeSelectModel;
import cn.jetpiece.cloud.model.response.Result;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * @author hancp
 * @version 1.0
 * @description: 字典表 服务类
 * @date 2021-11-08 10:15:39
 */
public interface IDictService extends IService<Dict> {

    List<DictModel> queryDictItemsByCode(String code);

    Map<String, List<DictModel>> queryAllDictItems();

    @Deprecated
    List<DictModel> queryTableDictItemsByCode(String table, String text, String code);

    @Deprecated
    List<DictModel> queryTableDictItemsByCodeAndFilter(String table, String text, String code, String filterSql);

    String queryDictTextByKey(String code, String key);

    @Deprecated
    String queryTableDictTextByKey(String table, String text, String code, String key);

    @Deprecated
    List<String> queryTableDictByKeys(String table, String text, String code, String keys);

    /**
     * 根据字典类型删除关联表中其对应的数据
     *
     * @param sysDict
     * @return
     */
    boolean deleteByDictId(Dict sysDict);

    /**
     * 添加一对多
     */
    Integer saveMain(Dict sysDict, List<DictItem> sysDictItemList);

    /**
     * 查询所有部门 作为字典信息 id -->value,departName -->text
     *
     * @return
     */
    List<DictModel> queryAllDepartBackDictModel();

    /**
     * 查询所有用户  作为字典信息 username -->value,realname -->text
     *
     * @return
     */
    List<DictModel> queryAllUserBackDictModel();

    /**
     * 通过关键字查询字典表
     *
     * @param table
     * @param text
     * @param code
     * @param keyword
     * @return
     */
    @Deprecated
    List<DictModel> queryTableDictItems(String table, String text, String code, String keyword);

    /**
     * 查询字典表数据 只查询前10条
     *
     * @param table
     * @param text
     * @param code
     * @param keyword
     * @return
     */
    List<DictModel> queryLittleTableDictItems(String table, String text, String code, String keyword, int pageSize);

    /**
     * 根据表名、显示字段名、存储字段名 查询树
     *
     * @param table
     * @param text
     * @param code
     * @param pidField
     * @param pid
     * @param hasChildField
     * @return
     */
    @Deprecated
    List<TreeSelectModel> queryTreeList(Map<String, String> query, String table, String text, String code, String pidField, String pid, String hasChildField);

    /**
     * 真实删除
     *
     * @param id
     */
    void deleteOneDictPhysically(String id);

    /**
     * 修改delFlag
     *
     * @param delFlag
     * @param id
     */
    void updateDictDelFlag(int delFlag, String id);

    /**
     * 查询被逻辑删除的数据
     *
     * @return
     */
    List<Dict> queryDeleteList();

    /**
     * 分页查询
     *
     * @param query
     * @return
     */
    @Deprecated
    List<DictModel> queryDictTablePageList(TableDictQuery query);

    /**
     * 通过多个字典code获取字典数据
     *
     * @param dictCodeList
     * @return key = 字典code，value=对应的字典选项
     */
    Map<String, List<DictModel>> queryDictItemsByCodeList(List<String> dictCodeList);

    /**
     * 【JSearchSelectTag下拉搜索组件专用接口】
     * 大数据量的字典表 走异步加载  即前端输入内容过滤数据
     *
     * @param dictCode 字典code格式：table,text,code
     * @return
     */
    List<DictModel> loadDict(String dictCode, String keyword, Integer pageSize);

    /**
     * 查询字典表所有数据
     * @param table
     * @param text
     * @param code
     * @param condition
     * @param keyword
     * @return
     */
    public List<DictModel> queryAllTableDictItems(String table, String text, String code, String condition, String keyword);

    /**
     * 查询字典表数据 只查询前10条
     * @param table
     * @param text
     * @param code
     * @param keyword
     * @return
     */
    public List<DictModel> queryLittleTableDictItems(String table, String text, String code, String condition, String keyword, int pageSize);

}
